﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using UricaoWeb.LogicaDeNegocios.Cargos;
using System.Text;
using UricaoWeb.Presentacion;
using UricaoWeb.LogicaDeNegocios.Seguridad_y_Roles;

public partial class _api_cargo_modificar2 : API_Seguridad_Principal 
{
    private readonly string _mensajeExito = "Cargo modificado exitosamente."; //Mensaje de cargo modificado exitosamente
    private readonly string _mensajeExisteCargo = "Cargo existente."; //Mensaje de cargo existente en la base de datos
    private readonly string _mensajeCargoValido = "Nombre válido"; //Mensaje de nuevo nombre válido
    private readonly string _mensajeError = "No se pudo realizar su solicitud. Intente más tarde."; //Mensaje de error general
    private readonly string _mensajeCargoInvalido = "Cargo inválido. Sólo letras y espacios. 4-50 caracteres."; //Mensaje de cargo inválido
    private readonly string _funcionRealizar = "Modificar";
    public static int _fkHotel = 1;
    private readonly string _cargoNombre = "_cargoNombre"; //Nombre del cargo
    private readonly string _cargoEstado = "_cargoEstado"; //Estado del cargo
    private readonly string _previousPage = "Api_cargo_Modificar.aspx"; //Página a redireccionar

    //Valores de retorno de la función verificarExistenciaCargo
    private readonly int _returnNoExiste = 0; //Cargo no existe 
    private readonly int _returnProblema = -1; //Problema con la base de datos

    protected string InputValue { get; set; }
    protected bool switchActivo;

    /// <summary>
    ///Método que actualiza los elementos de la página al cargarla
    /// </summary>
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["user"] != null)
        {
            Logica_Usuario usuario = (Logica_Usuario)Session["user"];
            _fkHotel = Convert.ToInt32(usuario.FkHotel);
            var master = Master as MasterPage;

            if (master != null)
                master.actualizar_label();

            base.validar_usuario();

            try
            {
                if (!IsPostBack)
                {
                    //Obtener valores de la variable de sesión
                    CampoNombre.Text = Session[_cargoNombre].ToString();
                    if (bool.Parse(Session[_cargoEstado].ToString()))
                        this.InputValue = "checked";
                    else
                        this.InputValue = "";
                    //Habilitar controles
                    CampoNombre.Enabled = true;
                }
            }
            catch (NullReferenceException) //Redireccionar cuando no venga de la página anterior
            {
                Response.Redirect(_previousPage);
            }
        }
        else
            Server.Transfer("API_Seguridad_Login_.aspx", false);
    }

    /// <summary>
    ///Método onClick del botón Aceptar. Modifica el cargo según los valores de los otros controles
    /// </summary>
    protected void Button1_Click(object sender, EventArgs e)
    {
        if (Request.Form["onoffswitch"] == "on")
            switchActivo = true;
        else
            switchActivo = false;
        if (LabelMensaje.Text == _mensajeCargoValido || LabelMensaje.Text == "") //Comprobar que se ha realizado alguna modificación válida
        {
            int idCargo = new Cargo().VerificarExistenciaCargo(Session[_cargoNombre].ToString(),_funcionRealizar); //Devolver id del cargo
            if (idCargo > 0)
            {
                if (this.switchActivo == true)
                {
                    this.InputValue = "checked";
                }
                else
                    this.InputValue = "";
                if (new Cargo().ModificarCargo(idCargo, CampoNombre.Text, switchActivo)) //Realizar modificación en la base de datos
                {
                    MostrarMensaje(_mensajeExito);
                    Response.Redirect(_previousPage); //Redireccionar a la página de selección de cargos
                    return;
                }
            }
            MostrarMensaje(_mensajeError);
        }
    }

    /// <summary>
    ///Metodo onClick del botón Cancelar. Redirecciona a la página de selección de cargos
    /// </summary>
    protected void BotonReg_Click(object sender, EventArgs e)
    {
        Response.Redirect(_previousPage);
    }

    /// <summary>
    ///Metodo que actualiza el label de notificación para conocer si la modificación es válida
    /// </summary>
    protected void CampoNombre_TextChanged(object sender, EventArgs e)
    {
        if (CampoNombre.Text != Session[_cargoNombre].ToString())
        {
            if (CampoNombre.Text.Length >= new Cargo().getLongMinNombre() && CampoNombre.Text.Length <= new Cargo().getLongMaxNombre() && CampoNombre.Text.All(c => char.IsLetter(c) || c == ' '))
            {
                int existeCargo = new Cargo().VerificarExistenciaCargo(CampoNombre.Text,_funcionRealizar);
                if (existeCargo == _returnNoExiste) {
                    LabelMensaje.Text = _mensajeCargoValido;
                    LabelMensaje.ForeColor = System.Drawing.Color.Green;
                    BotonCont.Enabled = true;
                }
                else if (existeCargo > _returnNoExiste) {
                    LabelMensaje.Text = _mensajeExisteCargo;
                    LabelMensaje.ForeColor = System.Drawing.Color.Red;
                    BotonCont.Enabled = false;
                }
                else if (existeCargo == _returnProblema) {
                    MostrarMensaje(_mensajeError);
                    BotonCont.Enabled = false;
                }
            }
            else
            {
                LabelMensaje.Text = _mensajeCargoInvalido;
                LabelMensaje.ForeColor = System.Drawing.Color.Red;
                BotonCont.Enabled = false;
            }
        }
        else
        {
            LabelMensaje.Text = "";
            BotonCont.Enabled = true;
        }
    }

    /// <summary>
    ///Metodo que muestra un mensaje según el parámetro mensaje.
    /// </summary>
    /// <param name="mensaje">El mensaje que se desea mostrar</param>
   protected void MostrarMensaje(string mensaje)
    {
        StringBuilder sb = new StringBuilder();
        sb.Append("ShowMessage('"+ mensaje +"');");
    }
}